package com.mall.module.product.mapper;

import com.mall.module.product.domain.entity.ProductRelation;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 商品关联表数据访问层
 */
@Mapper
public interface ProductRelationMapper {
    /**
     * 批量插入商品关联
     *
     * @param relationList 关联实体列表
     * @return 影响行数
     */
    int batchInsert(List<ProductRelation> relationList);
    
    /**
     * 查询商品关联
     *
     * @param productId 商品ID
     * @param relationType 关联类型
     * @return 关联ID列表
     */
    List<Long> selectRefIds(@Param("productId") Long productId, @Param("relationType") Integer relationType);
    
    /**
     * 删除商品关联
     *
     * @param productId 商品ID
     * @param relationType 关联类型
     * @param refIds 关联ID列表，为空则删除所有关联
     * @return 影响行数
     */
    int deleteRelations(@Param("productId") Long productId, 
                          @Param("relationType") Integer relationType,
                          @Param("refIds") List<Long> refIds);
    
    /**
     * 根据商品ID删除所有关联
     *
     * @param productId 商品ID
     * @return 影响行数
     */
    int deleteByProductId(Long productId);
    
    /**
     * 根据关联类型和关联ID查询商品ID列表
     *
     * @param relationType 关联类型
     * @param refId 关联ID
     * @return 商品ID列表
     */
    List<Long> selectProductIdsByRefId(@Param("relationType") Integer relationType, @Param("refId") Long refId);

    void insert(ProductRelation relation);
}